package com.dj.product.k2faas.jpa.sqlgenerator;

import com.dj.product.k2faas.jpa.dto.QueryArg;

/**
 * Created by 丁建 on 2025/9/23 09:51
 *
 * @author 丁建
 */
public interface SqlGenerator {
    /**
     * 生成一个已经完成分而的SQL不增加任何额外的过滤条件
     *
     * @param basicSql        基础Sql
     * @param indexColumnName 有索引的排序字段
     * @param page            页号
     * @param size            页大小
     * @return sql
     */
    String getPagedSql(String basicSql, String indexColumnName, int page, int size);

    /**
     * 生成一个已经完成分而的SQL不增加任何额外的过滤条件
     *
     * @param basicSql 基础Sql
     * @param page     页号
     * @param size     页大小
     * @return sql
     */
    String getPagedSql(String basicSql, int page, int size);

    /**
     * 生成统计数据条数的sql
     *
     * @param template sql模板
     * @param queryArg 带分页信息的查询参数
     * @return sql
     */
    String getQueryBasicSql(String template, QueryArg queryArg);

    /**
     * 生成统计数据条数的sql
     *
     * @param basicSql 基础Sql
     * @return sql
     */
    String getCountSql(String basicSql);

    /**
     * 生成查询单条数据的SQL
     *
     * @param basicSql 基础Sql
     * @return sql
     */
    String getFetchSql(String basicSql);

    /**
     * 取Offset
     *
     * @param page 从0开始
     */
    default int getOffset(int page, int size) {
        return page * size;
    }

}
